#! /bin/sh
# vim:et:ft=sh:sts=2:sw=2
#
# Copyright 2020 dockerlin@163.com. All Rights Reserved.
# Released under the Apache 2.0 license.
# http://www.apache.org/licenses/LICENSE-2.0
#
# cxlib -- 封装常用shell命令，力求使用者不需要了解具体命令就能完成大部分常用功能。
# https://gitee.com/dockerlin666/shell-lib.git
#
# @feature:
#     自动加载所有工具类库;
#     扩展类库方便;
# @link:
#     使用log4jsh作为日志系统 https://github.com/kward/log4sh.git
#     使用shunit2作为测试工具 https://github.com/kward/shunit2    
# 

# 设置版本信息
CXLIB_VERSION="0.6.0"
# 获取当前脚本的路径，变量名称加上 CXLIB 前缀，避免冲突
# 使用环境变量BASH_SOURCE，目前只在bash环境中测试
if [ -z ${BASH_SOURCE} ]; then 
    echo "未发现BASH_SOURCE环境变量，不支持此操作"
    exit 2
fi
if [ -z ${CXLIB_ROOT_PATH} ]; then  
    CXLIB_ROOT_PATH=$(dirname $(readlink -f $BASH_SOURCE))
fi

# 加载常用配置
. ${CXLIB_ROOT_PATH}/common

# 定义两个目录： tools 和 extends（用户扩展用） 递归调用一下目录下文件，自动加载
CXLIB_TOOLS_PATH=${CXLIB_ROOT_PATH}/tools
CXLIB_EXTENDS_PATH=${CXLIB_ROOT_PATH}/extends
#
# 递归调用自动加载指定目录下文件
# $1 传入目录
#
function cxlib_auto_load(){
    if [ -z "$1" ]; then return 1; fi
    if [ ! -d "$1" ]; then logger_error "$1 is not dir"; return 1; fi
    for file in $(ls $1); do  
        # 跳过index文件，留下做扩展
        if [ "$file" = "index" ]; then continue; fi
        #echo $file
        loadfile=$1"/"$file
        if [ -f $loadfile ]; then
            # 检查是否已加载过

            # 检查文件中是否存在已文件名命名的方法，
            # 存在则运行该方法，该方法返回大于0，提醒用户改方法不可用
            logger_debug "load file with source :$loadfile"
            source "$loadfile"
            logger_debug "Checking depends:$loadfile"
            command -v "$file" >/dev/null 2>&1
            retval=$?
            
            if [ $retval -gt 0 ]; then 
                logger_debug "method not function:$loadfile"
            else
                eval "$file"
                retval=$?
                logger_debug "execute function:$loadfile"
                if [ $retval -gt 0 ]; then
                    logger_error "file $loadfile had load,bug maybe not support the function!"
                fi
            fi
        elif [ -d $loadfile ]; then
            logger_debug "load directory :$loadfile"
            cxlib_auto_load $loadfile
        else
            logger_error "who am i :$loadfile,can not load me!"
        fi
    done
    # unset cur_dir  retval
    return 0
}


cxlib_auto_load "$CXLIB_TOOLS_PATH"
cxlib_auto_load "$CXLIB_EXTENDS_PATH"



